var foo = 7;
console.log(foo);

function f() {
  console.log("这是个函数！");
}
f();

console.log("--------sum--------");

function sum(a, b) {
  return Number(a) + Number(b);
}

console.log("加：" + sum(1, 2));
console.log("--------sum2--------");
// 匿名函数是一种 “表达式” 而非 “语句”，所以也可以在表达式内使用。另外由于它是表达式，因此也会有返回值。
// 匿名函数的返回值是个 “function对象的引用”，把它理解成返回一个 “函数” 也没问题。
var sum2 = function (c, d) {
  return Number(c) - Number(d);
};

console.log("减：" + sum2(3, 4));

console.log("--------sum3--------");

var sum3 = sum;

console.log(sum3(5, 6));

console.log("--------字面量表达式与对象的使用--------");

// 对象 “字面量表达式” 的语法 {属性名：属性值，属性名：属性值，······}
// 对对象字面量表达式求值所得到的结果，是所生成对象的一个引用
var obj = { x: 3, y: 4 };
console.log(typeof obj);

console.log("--------属性访问 (.)方式--------");

console.log(obj.y);

// 访问字面量表达式的值
var obj2 = { pos: { x: 5, y: 6 } };
console.log(obj2.pos.x);

// 修改字面量表达式的值
obj2.pos.x = 10;
console.log("修改后的数值：" + obj2.pos.x);
console.log(obj2);

// 如果赋值给上不存在的值，则建辉新建该属性并对其赋值
obj2.pos.z = 7;
console.log("给字面量表达式添值：" + obj2.pos.z);
console.log(obj2);

console.log("--------属性访问 ([])方式--------");

// 通过 [] 来访问 属性值
console.log("[]访问obj2的x属性值：" + obj2["pos"]["y"]);

// 将 5 赋值给 ”5“ 这个属性，如果不存在则新建该属性并赋值
console.log((obj["5"] = 5));
console.log(obj);

console.log(
  "-------- 方法 ：可以把任意类型的值、对象或者函数赋值给对象的属性。--------"
);
// 可以把任意类型的值、对象或者函数赋值给对象的属性。

obj.fn = function (a, b) {
  return Number(a) * Number(b);
};
console.log("乘：" + obj.fn(3, 4));
console.log(obj);

obj.fn2 = sum;
console.log(obj.fn2(3, 4));
console.log(obj);

console.log("-------- new 表达式 ：new表达式是生成一个对象 --------");
console.log(
  "-------- 根据 JavaScript 的语法规则，new 之后所写的是函数名。在 new 之后写函数名的话，就会把该函数作为构造函数来进行调用。 --------"
);
console.log(" 构造函数的特点  ");
console.log("  a:构造函数的首字母必须大写，用来区分于普通函数 ");
console.log("  b:内部使用的this对象，来指向即将要生成的实例对象 ");
console.log("  c:使用New来生成实例对象 ");
console.log("  首先创建一个简单的构造函数 ");
console.log("  		//创建一个构造函数 ");
console.log("  		function People (name,str) {  ");
console.log("  			this.name = name;  ");
console.log("  			this.fun = function() { ");
console.log("  				console.log(str);  ");
console.log("  			};  ");
console.log("  			this.act = function () {  ");
console.log('  				console.log("我是"+this.name+str); ');
console.log("  			}; ");
console.log("  		}  ");
console.log("  		//实例化一个People  ");
console.log('  		var g1 = new People("郭小妹","美美美"); ');
console.log('  		var g2 = new People("东东","吃吃吃")  ');
console.log("  		g1.fun();  ");
console.log("  		g1.act();  ");
console.log("  		g2.act();  ");

var new_obj = new Object();
console.log("new_obj类型是：" + typeof new_obj);

console.log(
  "-------- 类与实例 ：强调一下，在 JavaScript 中没有“类”这个概念 --------"
);

console.log("--------  数组 : 啥都能装 --------");

var arr = [
  1,
  "2",
  // 函数方法
  function add(a, b) {
    return Number(a) + Number(b);
  },
  // 字面量表达式
  { 1: 2, "3": 4 },
];

var add = arr[2];
console.log(add(1, 12));
